অ্যারে হল একই ধরনের ডেটা একত্রে সংরক্ষিত একটি ডেটা স্ট্রাকচার। সি প্রোগ্রামিং ভাষায়, অ্যারে ব্যবহার করে একসাথে একাধিক ভ্যালু সংরক্ষণ করা যায়, যেমন একটি সংখ্যা, অক্ষর, অথবা অন্যান্য ডেটা টাইপের মান। অ্যারে খুবই কার্যকরী, বিশেষত যখন একাধিক ডেটার সাথে কাজ করতে হয়।
এখানে সি প্রোগ্রামে অ্যারে এর মৌলিক ধারণা এবং ব্যবহার দেখানো হবে।
সি ভাষায় অ্যারে ডিক্লেয়ার করতে হলে তার ডেটা টাইপ এবং সাইজ নির্ধারণ করতে হয়।
সাধারণ সিনট্যাক্স:
data_type array_name[array_size];
এখানে:
data_type
: অ্যারে স্টোর করবে এমন ডেটা টাইপ (যেমন int
, float
, char
ইত্যাদি)।array_name
: অ্যারের নাম।array_size
: অ্যারের আকার, অর্থাৎ কতটি উপাদান অ্যারে ধারণ করবে।#include <stdio.h>
int main() {
int arr[5]; // An integer array of size 5
// Assigning values to the array elements
arr[0] = 10;
arr[1] = 20;
arr[2] = 30;
arr[3] = 40;
arr[4] = 50;
// Accessing and printing the array values
for (int i = 0; i < 5; i++) {
printf("Element %d: %d\n", i, arr[i]);
}
return 0;
}
ব্যাখ্যা:
int arr[5];
: এটি একটি ইন্টিজার অ্যারে ডিক্লেয়ার করেছে যার সাইজ ৫।arr[0]
, arr[1]
ইত্যাদি অ্যারের উপাদান অ্যাক্সেস করতে ব্যবহার করা হয়।অ্যারে ডিক্লেয়ার করার পর, এটিকে একাধিকভাবে মান দিতে পারি একসাথে বা পরবর্তীতে।
অ্যারে ডিক্লেয়ার করার সময় মান ইনিশিয়ালাইজ করা যায়।
#include <stdio.h>
int main() {
// Initialize the array with values
int arr[] = {10, 20, 30, 40, 50};
// Accessing and printing the array values
for (int i = 0; i < 5; i++) {
printf("Element %d: %d\n", i, arr[i]);
}
return 0;
}
ব্যাখ্যা:
int arr[] = {10, 20, 30, 40, 50};
: অ্যারে arr
কে ৫টি উপাদান দিয়ে ইনিশিয়ালাইজ করা হয়েছে। এখানে সাইজ নির্ধারণ করার প্রয়োজন নেই, কারণ সি ভাষা নিজে থেকেই সংখ্যা গুনে সাইজ অনুমান করে।অ্যারে শুধু এক মাত্রিক নয়, বরং একাধিক মাত্রা (মাল্টিডাইমেনশন) হিসাবেও ডিক্লেয়ার করা যায়। যেমন, 2D অ্যারে, যা একটি টেবিল বা ম্যাট্রিক্সের মতো।
#include <stdio.h>
int main() {
// Declare a 2D array (matrix)
int arr[2][3] = {
{1, 2, 3},
{4, 5, 6}
};
// Accessing and printing the 2D array values
for (int i = 0; i < 2; i++) {
for (int j = 0; j < 3; j++) {
printf("Element [%d][%d]: %d\n", i, j, arr[i][j]);
}
}
return 0;
}
ব্যাখ্যা:
int arr[2][3];
: এটি একটি ২ ডি অ্যারে যা ২টি রো (row) এবং ৩টি কলাম (column) ধারণ করে।arr[i][j]
: ২ ডি অ্যারের প্রতিটি উপাদান অ্যাক্সেস করতে ব্যবহার করা হয়।সি প্রোগ্রামে, অ্যারে এবং পয়েন্টার একে অপরের সাথে সম্পর্কিত। অ্যারের নাম সরাসরি একটি পয়েন্টার হিসেবে কাজ করে, যা প্রথম উপাদানের মেমরি ঠিকানা ধারণ করে।
#include <stdio.h>
int main() {
int arr[] = {10, 20, 30, 40, 50};
// Using pointer to access array elements
int *ptr = arr; // Pointer to the array
// Accessing elements through the pointer
for (int i = 0; i < 5; i++) {
printf("Element %d: %d\n", i, *(ptr + i));
}
return 0;
}
ব্যাখ্যা:
int *ptr = arr;
: এখানে ptr
পয়েন্টারকে arr
অ্যারের প্রথম উপাদানের মেমরি ঠিকানা দেয়া হয়েছে।*(ptr + i)
: পয়েন্টার ptr
এর মাধ্যমে অ্যারের উপাদান অ্যাক্সেস করা হচ্ছে।সি প্রোগ্রামে, অ্যারে একটি ফাংশন প্যারামিটার হিসেবে পাঠানো যেতে পারে। অ্যারের নাম পয়েন্টার হিসেবে আচরণ করে, তাই ফাংশনে অ্যারে পাস করলে মূল অ্যারের মান পরিবর্তন করা সম্ভব।
#include <stdio.h>
void modifyArray(int arr[], int size) {
for (int i = 0; i < size; i++) {
arr[i] = arr[i] * 2; // Modifying the array elements
}
}
int main() {
int arr[] = {1, 2, 3, 4, 5};
int size = 5;
modifyArray(arr, size); // Pass array to function
// Printing modified array
for (int i = 0; i < size; i++) {
printf("Modified Element %d: %d\n", i, arr[i]);
}
return 0;
}
ব্যাখ্যা:
modifyArray(int arr[], int size)
: অ্যারে এবং তার সাইজ ফাংশনে প্যারামিটার হিসেবে পাঠানো হচ্ছে।arr[i] = arr[i] * 2;
: অ্যারের প্রতিটি উপাদান দ্বিগুণ করা হচ্ছে।সি প্রোগ্রামে অ্যারে স্ট্যাটিকভাবে (compile-time) এবং ডাইনামিকভাবে (run-time) ডিক্লেয়ার করা যেতে পারে। ডাইনামিক অ্যারে সি ভাষায় malloc(), calloc(), realloc() ইত্যাদি ফাংশনের মাধ্যমে তৈরি করা যায়, যা রান-টাইমে মেমরি অ্যালোকেশন করে।
#include <stdio.h>
#include <stdlib.h>
int main() {
int *arr;
int n = 5;
// Dynamically allocate memory for 5 integers
arr = (int*)malloc(n * sizeof(int));
// Check if memory allocation was successful
if (arr == NULL) {
printf("Memory allocation failed\n");
return 1;
}
// Assign values to the dynamically allocated array
for (int i = 0; i < n; i++) {
arr[i] = (i + 1) * 10;
}
// Print the values
for (int i = 0; i < n; i++) {
printf("Element %d: %d\n", i, arr[i]);
}
// Free dynamically allocated memory
free(arr);
return 0;
}
ব্যাখ্যা:
malloc(n * sizeof(int))
: ডাইনামিকভাবে মেমরি অ্যালোকেট করা হয়েছে যা n
সংখ্যক int ধারণ করতে পারে।free(arr)
: ডাইনামিকভাবে অ্যালোকেটেড মেমরি মুক্ত করা হয়।সি প্রোগ্রামে অ্যারে একটি গুরুত্বপূর্ণ ডেটা স্ট্রাকচার যা এক ধরনের ডেটা একত্রে সংরক্ষণের জন্য ব্যবহৃত হয়। এটি একটি মাত্রিক অ্যারে, মাল্টিডাইমেনশনাল অ্যারে, পয়েন্টার ব্যবহার করে বিভিন্ন কার্যকরী প্রোগ্রাম তৈরি করতে সাহায্য করে
। ডাইনামিক অ্যারে সিস্টেমের রান-টাইমে মেমরি অ্যালোকেশন ও ম্যানেজমেন্টে ব্যবহৃত হয়, যা প্রোগ্রামের মেমরি ব্যবহারের নিয়ন্ত্রণে সহায়ক।
এই অধ্যায়ে আপনি সি প্রোগ্রামিং এ array নিয়ে কাজ করা শিখবেন। সুতরাং এই অধ্যায় শেষে আপনি array ডিক্লেয়ার(declare), ইনিশিয়ালাইজ(initialize) এবং এক্সেস(access) করা শিখবেন।
Array হলো একটি বিশেষ ধরনের ভেরিয়েবল যার মধ্যে একসঙ্গে একই টাইপের নির্দিষ্ট সংখ্যক ভ্যালু জমা রাখা যায়।
উদাহরণস্বরূপঃ আপনি যদি ১০০০ জন ছাত্রের পরীক্ষার মার্ক সংগ্রহ করে রাখতে চান তাহলে সিঙ্গেল ভ্যারিয়েবলের পরিবর্তে নিচের ন্যায় array ভ্যারিয়েবল তৈরি করুন।
float mark[1000];
সি প্রোগ্রামিং এ Array ডিক্লেয়ারেশনের পরে array এর টাইপ এবং দৈর্ঘ্য পরিবর্তন করা যায় না।
সি প্রোগ্রামিং এ দুই ধরণের array রয়েছেঃ
- One-dimensional array
- Multidimensional array
dataType arrayName[arraySize];
উদাহরণস্বরূপ
float mark[5];
এখানে mark নামের এবং ফ্লোটিং পয়েন্ট টাইপের একটি array ভ্যারিয়েবল ডিক্লেয়ার করা হয়েছে যার সাইজ ৫। সুতরাং ইহা ৫ টি দশমিক(float) ভ্যালু গ্রহণ করতে পারে।
ইনডেক্স(index) ব্যবহার করে Array এর এলিমেন্টকে এক্সেস করা হয়।
ধরুন, আপনি উপরের mark অ্যারেটি ডিক্লেয়ার করেছেন। তাহলে mark এর এলিমেন্ট-সমূহকে এক্সেস করার জন্য প্রথম এলিমেন্টের ক্ষেত্রে mark[0], দ্বিতীয় এলিমেন্টের ক্ষেত্রে mark[1] লিখতে হবে এবং এভাবে চলতে থাকবে।
- Array এর ইনডেক্সিং 1 এর পরিবর্তে 0 দিয়ে শুরু হয়। উপরের উদাহরণে array এর প্রথম এলিমেন্টটি হলোঃ mark[0]
- Array এর সাইজ যদি n হয় তাহলে এর শেষ এলিমেন্টকে এক্সেস করার জন্য
(n-1)
ইনডেক্স ব্যবহার করা হয়। উপরের উদাহরণে array এর সাইজ ৫ তাই শেষ এলিমেন্টকে mark[4] এর মাধ্যমে এক্সেস করা হয়েছে।- ধরুন
mark[0]
এর এড্রেস 8024a দ্বারা শুরু হয়েছে তাহলেmark[1]
এর এড্রেস হবে 8028a এবংmark[2]
এর এড্রেস হবে 8032a, কারণ ফ্লোট ভ্যারিয়েবলের সাইজ ৪(চার) বাইট।
ডিক্লেয়ারেশনের সময়ও array ভ্যারিয়েবলকে ইনিশিয়ালাইজড(initialize) করা যায়। অর্থাৎ ডিক্লেয়ারেশনের সময় array তে ভ্যালু এসাইন করা যায়।
উদাহরণস্বরূপঃ
ডিক্লেয়ারেশনের সময় সাইজসহ array ইনিশিয়ালাইজেশন(initialization)
int mark[5] = {89, 80, 88, 83, 90};
ডিক্লেয়ারেশনের সময় সাইজ ছাড়া array ইনিশিয়ালাইজেশন(initialization)
int mark[] = {89, 80, 88, 83, 90};
এখানে
mark[0] হলো 89 এর সমান
mark[1] হলো 80 এর সমান
mark[2] হলো 88 এর সমান
mark[3] হলো 83 এর সমান
mark[4] হলো 90 এর সমান
int mark[5] = {89, 80, 88, 83, 90}
// তৃতীয় এলিমেন্টের জায়গায় ভিন্ন ভ্যালু ইনসার্ট(insert)
mark[2] = 9;
// ইউজার কর্তৃক ইনপুট নিয়ে তৃতীয় এলিমেন্টে ভ্যালু ইনসার্ট
scanf("%d", &mark[2]);
// ইউজার কর্তৃক ইনপুট নিয়ে (i+1) তম এলিমেন্টে ভ্যালু ইনসার্ট
scanf("%d", &mark[i]);
// array এর প্রথম এলিমেন্ট প্রিন্ট করবে
printf("%d", mark[0]);
// array এর i তম এলিমেন্ট প্রিন্ট করবে
printf("%d", age[i-1]);
kt_satt_skill_example_id=348
ধরুন, আপনি নিচের ন্যায় ১০টি এলিমেন্ট বিশিষ্ট একটি array ডিক্লেয়ার করেছেনঃ
int testArray[10];
আপনি testArray[0]
থেকে testArray[9]
ব্যবহার করে array এর মেম্বার-সমূহকে এক্সেস করতে পারবেন।
আপনি যদি array এলিমেন্টকে এই রেঞ্জের বাইরে থেকে যেমন - testArray[15]
এভাবে এক্সেস করতে চান তাহলে কম্পাইলার কোনো error দেখাবেনা ঠিকই। কিন্তু এই কারণে অপ্রত্যাশিত ফলাফল যেমন-undefined আসতে পারে।
এই অধ্যায়ে আপনি সি প্রোগ্রামিং এ মাল্টি-ডাইমেনশনাল অ্যারে(multi-dimensional array) নিয়ে কাজ করা শিখবেন।
মাল্টিডাইমেনশনাল(multi-dimensional) Array বলতে ঐধরনের Array কে বুঝায় যার মধ্যে এক বা তার অধিক Array থাকে।
Array এর ডাইমেনশন বলতে কোন একটি এলিমেন্টকে এক্সেস(access) করার জন্য যত সংখ্যক ইনডেক্সের প্রয়োজন হয় তাকে বুঝায়।
- দুই ডাইমেনশনের Array থেকে একটি এলিমেন্টকে এক্সেস করার জন্য আপনার দুটি ইনডেক্স নম্বর লাগবে।
- তিন ডাইমেনশনের Array থেকে একটি এলিমেন্টকে এক্সেস করার জন্য আপনার তিনটি ইনডেক্স নম্বর লাগবে।
সি প্রোগ্রামিং এ আপনি array এর মধ্যে array তৈরি করতে পারেন যা mult-idimensional array নামে পরিচিত। উদাহরণস্বরূপঃ
int x[3][4];
এখানে x হলো দ্বি-মাত্রিক(two-dimensional) অ্যারে। এই array ১২টি এলিমেন্ট ধারণ করতে পারে। আপনি array কে table হিসাবেও কল্পনা করতে পারেন, যেখানে ৩টি সারি(row) এবং প্রত্যেক সারিতে ৪টি করে কলাম(column) আছে।
একইভাবে আপনি three-dimensional (3d) array ও ডিক্লেয়ার করতে পারেন। উদাহরণস্বরূপঃ
int y[2][4][3];
এখানে y অ্যারে ২৪ টি এলিমেন্ট ধারণ করতে পারে।
উপরের উদাহরণটিকে আপনি এভাবে চিন্তা করতে পারেন যে, প্রত্যেক 2টি এলিমেন্টের জন্য ৪টি এলিমেন্ট রয়েছে যা ৮টি এলিমেন্ট তৈরি করে এবং প্রত্যেক ৮টি এলিমেন্টর জন্য ৩টি এলিমেন্ট রয়েছে। সুতরাং সম্পূর্ণ এলিমেন্টের সংখ্যা হয় ২৪টি।
একের অধিক পদ্ধতিতে mult-idimensional array-কে initialize করা হয় যায়।
//two-dimensional array কে Initialize করার বিভিন্ন পদ্ধতি
int c[2][3] = {{1, 3, 0}, {-1, 5, 9}};
int c[][3] = {{1, 3, 0}, {-1, 5, 9}};
int c[2][3] = {1, 3, 0, -1, 5, 9};
multidimensional array কে two-dimensional array এর মত একই পদ্ধতিতে initialize করতে পারেন। উদাহরণস্বরূপঃ
int test[2][3][4] = {
{ {3, 4, 2, 3}, {0, -3, 9, 11}, {23, 12, 23, 2} },
{ {13, 4, 56, 3}, {5, 9, 3, 5}, {3, 1, 4, 9} }
};
kt_satt_skill_example_id=357
সি প্রোগ্রামে মাল্টি-ডাইমেনশনাল array ব্যবহার করে 2*2 অর্ডারের দুটি ম্যাট্রিক্সকে যোগ করার প্রোগ্রাম।
kt_satt_skill_example_id=360
ইউজার কর্তৃক ইনপুট দেওয়া ভ্যালু স্টোর(store) এবং প্রদর্শনীর(display) জন্য three-dimensional Array বিশিষ্ট সি প্রোগ্রাম
kt_satt_skill_example_id=364
এই অধ্যায়ে আপনি ফাংশনের মধ্য দিয়ে array কে অতিক্রম(pass) করানো এবং আপনার প্রোগ্রামে array এর ব্যবহার শিখবেন। সুতরাং এই অধ্যায় শেষে আপনি one-dimensional এবং multi-dimensional উভয় array কে ফাংশনের মধ্য দিয়ে অতিক্রম করানো শিখবেন।
সি প্রোগ্রামিং এ array এর একটি এলিমেন্টকে অথবা সম্পূর্ণ array কে ফাংশনের মধ্যে দিয়ে অতিক্রম করানো যায়।
one-dimensional এবং multi-dimensional উভয় array এর জন্য এই কাজটি করা যায়।
ফাংশনের মধ্য দিয়ে ভ্যারিয়েবলকে যে পদ্ধিতিতে অতিক্রম(pass) করানো হয়, একই পদ্ধতিতে array এর একটি একক এলিমেন্টকেও অতিক্রম করানো যায়।
ফাংশনের মধ্য দিয়েে array এর একটি একক এলিমেন্টকে অতিক্রম করানোর জন্য প্রোগ্রাম
kt_satt_skill_example_id=375
ফাংশনের মধ্য দিয়ে array-কে আর্গুমেন্ট(argument) হিসাবে অতিক্রম করানো হলে শুধুমাত্র array এর নাম অতিক্রম হয়। অর্থাৎ মেমোরি এরিয়ার একেবারে শুরু থেকে আর্গুমেন্ট হিসাবে অতিক্রম করে।
ব্যক্তির বয়স সম্বলিত array কে ফাংশনের মধ্য দিয়ে অতিক্রম করানোর জন্য সি প্রোগ্রাম। এই ফাংশনের মাধ্যমে ব্যক্তির গড় বয়স নির্ণয় করে main ফাংশনের মাধ্যমে ডিসপ্লে(display) করানো হয়।
kt_satt_skill_example_id=378
tow-dimensional array কে আর্গুমেন্ট হিসাবে ফাংশনের মধ্য দিয়ে অতিক্রম(passed) করানোর সময় one-dimensional array এর মতই সংরক্ষিত মেমোরি এরিয়ার একেবারে শুরু থেকে অতিক্রম করে।
kt_satt_skill_example_id=379
common.read_more